home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 21 / AACD 21.iso / AACD / System / XFDmaster / xfd_Developer / Sources / ASM / Silmarils.a < prev    next >
Encoding:
Text File  |  2001-03-25  |  4.3 KB  |  279 lines

  1. *******************************************************
  2. **      XFD external decruncher for Silm Cruncher    **
  3. **        written by Mok and Wanted Team             **
  4. **        fixed by SDI in 1999,2000             **
  5. *******************************************************
  6.  
  7.  
  8.         INCLUDE    "AINCLUDE:IncDirs.i"
  9.         INCLUDE    "libraries/xfdmaster.i"
  10.  
  11.         * head function for tests
  12. *        INCLUDE    "xfdExeHead.a"
  13.  
  14. ; xfdForeman structure MUST be first thing in all external decrunchers
  15.  
  16. ForeMan        moveq    #-1,d0        ;security
  17.         rts
  18.         dc.l    XFDF_ID        ;id
  19.         dc.w    1        ;version
  20.         dc.w    0
  21.         dc.l    0,0        ;private
  22.         dc.l    S_Silm        ;first slave
  23.  
  24.         dc.b    "$VER: Silmarils 1.2 (17.10.2000) by Mok and Wanted Team",0
  25. N_Silm        dc.b    "Silmarils Data Cruncher",0
  26.         even
  27.  
  28. **************************************************
  29.  
  30. ; xfdSlave structure: this one doesn't support segment decrunching
  31.  
  32. S_Silm        dc.l    0        ;no more slaves
  33.         dc.w    2        ;version
  34.         dc.w    39        ;master version
  35.         dc.l    N_Silm        ;name
  36.         dc.w    XFDPFF_DATA|XFDPFF_USERTARGET|XFDPFF_RECOGLEN
  37.         dc.w    0
  38.         dc.l    RB_Silm        ;recog buffer
  39.         dc.l    DB_Silm        ;decrunch buffer
  40.         dc.l    0        ;recog segment
  41.         dc.l    0        ;decrunch segment
  42.         dc.w    0,0
  43.         dc.l    12+2
  44.  
  45.  
  46. ;-------------------------------------------------
  47.  
  48. ; Recog buffer function: receives buffer + length in a0/d0
  49.  
  50. RB_Silm        CMP.L    #$8087010B,(A0)    * BSD executable
  51.         BEQ.B    .Exit
  52.         CMP.L    #$8103010B,(A0) * SUN executable
  53.         BEQ.B    .Exit
  54.  
  55.         cmp.b    #$A1,(a0)
  56.         beq.s    .Check1
  57.         cmp.b    #$C0,(A0)
  58.         beq.s    .Check2
  59.         cmp.b    #$C1,(A0)
  60.         beq.s    .Check2
  61.         cmp.b    #$80,(A0)
  62.         beq.s    .Check2
  63.         cmp.b    #$81,(A0)
  64.         beq.b    .Check2
  65.         bra.b    .Exit
  66. .Check1
  67.         cmp.l    #$0B090A0B,6(A0)
  68.         bne.b    .Check3
  69.         cmp.l    #$07050607,10(A0)
  70.         bne.b    .Check3
  71. .Check2
  72.         cmp.w    #$0001,4(A0)
  73.         beq.b    .Check4
  74. .Check3
  75.         tst.w    4(A0)
  76.         bne.b    .Exit
  77.         cmp.l    #$003D0900,10(A0)
  78.         bne.b    .Exit
  79.  
  80. .Check4        move.l    (a0),d0            *** added by SDI
  81.         and.l    #$FFFFFF,d0
  82.         tst.b    6(A0)
  83.         bne.b    .No
  84.         subq.l    #8,D0
  85.         subq.l    #8,D0
  86. .No        subq.l    #6,D0
  87.         ble.b    .Exit
  88.  
  89.         MOVE.L    D0,xfdrr_FinalTargetLen(A1)
  90.         ADDI.L    #$1000,D0
  91.         MOVE.L    D0,xfdrr_MinTargetLen(A1)
  92.  
  93.         moveq    #1,d0
  94.         rts
  95.  
  96. .Exit        moveq    #0,d0
  97.         rts
  98.  
  99. ;-------------------------------------------------
  100.  
  101. ;Decrunch buffer function: receives bufferinfo in a0
  102.  
  103. DB_Silm        movem.l    d2-d7/a2-a6,-(a7)
  104.         move.l    xfdbi_UserTargetBuf(A0),A1
  105.         move.l    xfdbi_SourceBuffer(A0),A0
  106.         bsr.s    D_Silm
  107.  
  108.         moveq    #1,d0
  109.         movem.l    (a7)+,d2-d7/a2-a6
  110.         rts
  111.  
  112. **************************************************
  113.  
  114. ; decruncher adapted by Mok
  115.  
  116. D_Silm
  117.     move.l    (a0),d1
  118.     and.l    #$FFFFFF,d1
  119.     cmp.b    #$A1,(A0)
  120.     bne.w    dec2                ;+
  121. ;    move.b    (a0),d0
  122. ;    and.b    #$F0,d0
  123. ;    cmp.b    #$80,d0
  124. ;    beq.w    dec2
  125.     move.l    a0,-(sp)
  126.     subq.l    #6,d1
  127.     addq.l    #6,a0
  128.     tst.b    (a0)
  129.     bne.s    niee
  130.     lea    $10(a0),a0
  131. ;    sub.l    #$10,d1
  132.     subq.l    #8,d1                ;+
  133.     subq.l    #8,d1                ;+
  134. niee:
  135.     move.l    a1,a2
  136.     add.l    d1,a2
  137.     subq.l    #1,a2
  138.     lea    VC038(pc),a5
  139.     move.l    (a0)+,(a5)
  140.     move.l    (a0)+,4(a5)
  141.     clr.w    d7
  142.     movem.l    d1/a1,-(sp)
  143.     bsr.s    LBFD8
  144.     movem.l    (sp)+,d0/a1
  145.     move.l    (sp)+,a0
  146.     rts
  147. LBFD8
  148.     cmp.l    a2,a1
  149.     bgt.s    LBF98
  150.     moveq    #1,d0
  151.     bsr.s    LC042
  152.     tst.b    d5
  153.     beq.s    LC000
  154.     moveq    #0,d2
  155. LBFE6
  156.     moveq    #2,d0
  157.     bsr.s    LC042
  158.     add.w    d5,d2
  159.     cmp.w    #3,d5
  160.     beq.s    LBFE6
  161. LBFF2
  162.     moveq    #8,d0
  163.     bsr.s    LC042
  164.     move.b    d5,(a1)+
  165.     dbf    d2,LBFF2
  166.     cmp.l    a2,a1
  167.     bgt.s    LBF98
  168. LC000
  169.     bsr.s    LC040
  170.     clr.w    d0
  171.     move.b    0(a5,d5.w),d0
  172.     and.w    #3,d5
  173.     beq.b    LC020
  174.     move.w    d5,d2
  175.     bsr.s    LC042
  176. LC014
  177.     neg.w    d5
  178. LC016
  179.     move.b    -1(a1,d5.w),(a1)+
  180.     dbf    d2,LC016
  181.     bra.s    LBFD8
  182. LBF98
  183.     rts
  184. LC020
  185.     bsr.b    LC042
  186.     move.w    d5,d3
  187.     clr.w    d2
  188. LC028
  189.     bsr.s    LC040
  190.     add.w    d5,d2
  191.     cmp.w    #7,d5
  192.     beq.s    LC028
  193.     move.w    d3,d5
  194.     addq.w    #4,d2
  195.     bra.s    LC014
  196. LC040
  197.     moveq    #3,d0
  198. LC042
  199.     sub.b    d0,d7
  200.     bmi.s    LC04C
  201.     clr.w    d5
  202.     rol.l    d0,d5
  203.     rts
  204. LC04C
  205.     add.b    d0,d7
  206.     clr.w    d5
  207.     rol.l    d7,d5
  208.     swap    d5
  209.     move.w    (a0)+,d5
  210.     swap    d5
  211.     sub.b    d7,d0
  212.     moveq    #$10,d7
  213.     rol.l    d0,d5
  214.     sub.b    d0,d7
  215.     rts
  216. VC038
  217.     dcb.l    $2,0
  218.  
  219. dec2:
  220.     move.l    d1,d0
  221.     movem.l    d0-d7/a0-a6,-(sp)
  222.     subq.l    #6,d1
  223.     addq.l    #6,a0
  224.     tst.b    (a0)                ;+
  225.     bne.s    LBEE0                ;+
  226.     lea    $10(a0),a0            ;+
  227.     subq.l    #8,d1                ;+
  228.     subq.l    #8,d1                ;+
  229.  
  230. LBEE0
  231.     move.l    d1,d6
  232.     move.l    a1,a5
  233.     add.l    a1,d6
  234.     move.l    d6,a6
  235.     move.l    a0,a3
  236. LBF12
  237.     moveq    #1,d3
  238. LBF18
  239.     tst.w    d3
  240.     bmi.b    LBF4E
  241.     bsr.b    LBF54
  242.     move.b    d0,d4
  243.     bmi.b    LBF3A
  244.     ext.w    d4
  245.     subq.w    #1,d4
  246. LBF2C
  247.     bsr.b    LBF54
  248.     bsr.b    LBF76
  249.     dbra    d4,LBF2C
  250.     bra.s    LBF18
  251. LBF3A
  252.     and.w    #$7F,d4
  253.     subq.w    #1,d4
  254.     bsr.b    LBF54
  255. LBF44
  256.     bsr.b    LBF76
  257.     dbra    d4,LBF44
  258.     bra.s    LBF18
  259. LBF4E
  260.     movem.l    (sp)+,d0-d7/a0-a6
  261.     rts
  262. LBF54
  263.     move.b    (a3)+,d0
  264.     rts
  265. LBF76
  266.     cmp.l    d6,a6
  267.     bge.b    LBF86
  268. LBF7C
  269.     move.b    d0,(a6)+
  270.     rts
  271. LBF86
  272.     move.l    a5,a6
  273.     addq.w    #1,a6
  274.     sub.w    d3,a6
  275.     subq.w    #1,d3
  276.     bpl.s    LBF7C
  277.     clr.w    d4
  278.     rts
  279.